// next 函数是中间件连续调用的关键
const express = require('express');;
const app = express();

//只有参数里 有next参数，并且调用next函数 才是中间件
const mv = function(req, res, next) {
        req.flag = true; //挂载参数
        console.log('我是第一次调用');
        next();
    }
    // 将mw注册为全局生效的中间件
app.use(mv);

// 简写方式，全局中间件
app.use((req, res, next) => {
    console.log('我是第二次调用');
    next(); //不调用next函数将无法执行路由
})


// 如果在get中指定了 next('route) 则会终止该堆栈的所有中间件 直接 跳到下一个
app.get('/zks', (req, res, next) => {
    console.log(('我指定了请求路径zks'));
    if (req.flag) {
        console.log(req.flag);
        next('route')
    } else { next() }
}, function(req, res, next) {
    console.log('我是第二个中间件');
    next()
});

// 指定请求的中间件

app.use('/zks', (req, res, next) => {
    console.log(('我是第三个中间件'));
    next()
}, function(req, res, next) {
    next()
});


//get post 也是中间件
app.get('/zks', (req, res) => {
    res.send('  我指定了请求路径zks');
});





app.get('/user', (req, res) => {
    res.send('获取成功');
})
app.post('/add', (req, res) => {
    res.send('请求成功');
});

// 自定义404界面 放在路由最后面 ，前面匹配不到就会匹配到最后一个
app.use((req, res, next) => {
    res.status(404).send('<h1 style="margin:100px;">404界面</h1>')
})
app.listen(80, function() {
    console.log('server runing http://127.0.0.1');
})